package ru.arriah.servicedesk.web.commonaction;

import java.io.IOException;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ru.arriah.common.web.action.ActionMapping;
import ru.arriah.common.web.action.DumbAction;
import ru.arriah.servicedesk.bean.RequestBean;
import ru.arriah.servicedesk.bean.TaskBean;
import ru.arriah.servicedesk.ejb.RequestManagerLocalHome;
import ru.arriah.servicedesk.ejb.RequestManagerLocalObject;
import ru.arriah.servicedesk.help.Utils;
import ru.arriah.servicedesk.web.commonaction.exception.InternalException;
import ru.arriah.servicedesk.web.commonaction.exception.PrivilegesException;

public class SetTaskActiveAction extends DumbAction {
  protected RequestManagerLocalHome requestManagerLocalHome;  
  
  public SetTaskActiveAction () throws NamingException {
    super();
    
    requestManagerLocalHome = 
      Utils.getRequestManagerHomeInterface();    
  }  

  
  public String execute(ActionMapping actionMapping,
      HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException {
    try {     
     RequestManagerLocalObject requestManager = 
       requestManagerLocalHome.create();
               
     int taskId = idVal(request.getParameter("task_id"));
     int userId = Utils.getUserId(request);
     String role = Utils.getUserRole(request);
              
     
     TaskBean taskBean = 
        requestManager.selectTask(taskId);
     RequestBean requestBean = 
        requestManager.selectRequestByTaskId(taskId);    
     
     if(!"chief".equals(role))
        if (requestBean.getLeadExecutorId() == userId)
           request.setAttribute("status", "request_lead_executor");
        else if (taskBean.getEmployeeId() == userId)
           request.setAttribute("status", "executor");
        else
           throw new PrivilegesException("Access denied");
     
     
     if (taskBean.getStatusId() == 3 || taskBean.getStatusId() == 1)
        addErrorMessage(request, config.getProperty("ERROR.STATUS_NOT_CHANGED"));     
     
     else if (requestManager.setTaskStatus(taskId, 1, userId)) {
        addInfMessage(request, config.getProperty("INF.TASK_ACTIVE"));
        
     } else
        addErrorMessage(request, config.getProperty("ERROR.STATUS_NOT_CHANGED"));     
     
     taskBean = requestManager.selectTask(taskId);  
     
     request.setAttribute("taskBean", taskBean);
     requestManager.remove();   
     
     return actionMapping.getSuccessTarget();
    } catch (Exception e) {
      handleException(e, "execute");
      throw new InternalException("ErrorMessage.internal");
    }
  }
}